﻿using UnityEngine;
using System.Collections;

public class GameController : MonoBehaviour {

	public GameObject smoke;
	public GameObject hit;

	// prefabs
	public GameObject jogador;
	public GameObject jogador2;
	public GameObject jogador3;
	public GameObject jogador4;

	public static bool usarControle = false;

	public static GameObject [] jogadores = new GameObject[4];

	public static int numeroJogadores = 3;
	
	public static GameController instancia;

	// Use this for initialization
	void Start () {

		instancia = this;
		Vector3 spawn = GameObject.Find ("SpawnPoint").transform.position;
		for(int x = 0 ; x < numeroJogadores ; x++) {

			//GameObject sm2 = (GameObject)Instantiate(GameController.instancia.jogador2, spawn.transform.position, spawn.transform.rotation);
			//Jogador2 j2 = sm2.GetComponent<Jogador2>();
			if(!usarControle) {
				if(x==0){
					GameObject sm = (GameObject)Instantiate(GameController.instancia.jogador, spawn, transform.rotation);
					Jogador j = sm.GetComponent<Jogador>();
					j.teclas = new Player1KeySetTeclado();
					jogadores[x] = sm;
					Debug.Log("Setei jogador "+x);
				}else if(x==1){
					GameObject sm = (GameObject)Instantiate(GameController.instancia.jogador2, spawn, transform.rotation);
					Jogador j = sm.GetComponent<Jogador>();
					j.teclas = new Player2KeySetTeclado();
					jogadores[x] = sm;
					Debug.Log("Setei jogador "+x);
				}else if(x==2){
					GameObject sm = (GameObject)Instantiate(GameController.instancia.jogador3, spawn, transform.rotation);
					Jogador j = sm.GetComponent<Jogador>();
					j.teclas = new Player3KeySetTeclado();
					jogadores[x] = sm;
					Debug.Log("Setei jogador "+x);
				}else if(x==3){
					GameObject sm = (GameObject)Instantiate(GameController.instancia.jogador4, spawn, transform.rotation);
					Jogador j = sm.GetComponent<Jogador>();
					j.teclas = new Player4KeySetTeclado();
					jogadores[x] = sm;
					Debug.Log("Setei jogador "+x);;
				}
			} else {
				if(x==0){
					GameObject sm = (GameObject)Instantiate(GameController.instancia.jogador, spawn, transform.rotation);
					Jogador j = sm.GetComponent<Jogador>();
					j.teclas = new Player1KeySet();
					jogadores[x] = sm;
					Debug.Log("Setei jogador "+x);
				}else if(x==1){
					GameObject sm = (GameObject)Instantiate(GameController.instancia.jogador2, spawn, transform.rotation);
					Jogador j = sm.GetComponent<Jogador>();
					j.teclas = new Player2KeySet();
					jogadores[x] = sm;
					Debug.Log("Setei jogador "+x);
				}
			}
			spawn.x += 60;
		}
	}

	public static GameObject getJogador(int numero) {
		return GameController.jogadores[numero];
	}

	public static GameObject getPrimeiroNaCorrida() {
		GameObject primeiro = null;
		foreach(GameObject jogador in jogadores) {
			if(primeiro == null || jogador.transform.position.x > primeiro.transform.position.x) {
				primeiro = jogador;
			}
		}
		return primeiro;
	}

	public static GameObject getUltimoVivoNaCorrida() {
		GameObject ultimo = null;
		foreach(GameObject jogador in jogadores) {
			if(ultimo == null || jogador.transform.position.x < ultimo.transform.position.x) {
				ultimo = jogador;
			}
		}
		return ultimo;
	} 

	public static GameObject getPenultimoVivoNaCorrida(GameObject player) {
		GameObject penultimo = null;
		foreach(GameObject jogador in jogadores) {
			if(jogador.name != player.name){
				if(penultimo == null || jogador.transform.position.x < penultimo.transform.position.x) {
					penultimo = jogador;
				}
			}
		}
		return penultimo;
	} 

	public static void playSmoke(float x, float y,float z) {
		GameObject sm = (GameObject)Instantiate(GameController.instancia.smoke, new Vector3(x,y,z), GameController.instancia.transform.rotation);
	}

	public static void playHit(Vector3 pos1, Vector3 pos2) {
		GameObject sm = (GameObject)Instantiate(GameController.instancia.hit, ((pos1+pos2)/2), GameController.instancia.transform.rotation);
	}
}
